package Z.dailyExercise.March;

import java.util.HashMap;
import java.util.Map;

public class _剑指Offer20表示数值的字符串 {

    /**
     * 符号：只能出现+- 并且位置在第一个 并且不能重复 + 43 -45 .46
     * 字母：只能出现 e/E e:101 E:69
     * 小数点：只能唯一的单独出现不能和字母同时出现
     * 数字 48-57
     *
     * @param s
     * @return
     */
    public boolean isNumber(String s) {
        Map<Character,Integer> map = new HashMap<>();
        int point =0,enu=0;

        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == 43 || s.charAt(i) == 45){
                if (!map.isEmpty()){
                    return false;
                }
                map.put(s.charAt(i),i);
                continue;
            }

            if (s.charAt(i) == 'e' || s.charAt(i) == 'E'){
                if (map.isEmpty()){
                    map.put(s.charAt(i),i);
                }
                for (char c:map.keySet()){
                    if (map.get(c)>i || enu >0 || i==0 || i==s.length()-1 ){
                        return false;
                    }
                }




                enu++;

            }

            if (s.charAt(i) == 46){
               if (i == 0 || i==s.length()-1 || point>0){
                   return false;
               }
               for (char c:map.keySet()){
                   if (c=='+' || c == '-'){
                       if (map.get(c) >i){
                           return false;
                       }
                   }
                   if (c=='e' || c == 'E'){
                       if (map.get(c) < i){
                           return false;
                       }

                   }
               }
                point++;
            }

        }

        return true;





    }



}
